package ru.niir.goodfil.db;

import ru.niir.goodfil.db.dic.ExchangeState;

import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;

import static ru.niir.goodfil.utils.Utils.s;

/**
 * Класс содержит информацию об обмене данными в 1С.
 * Класс является отражением таблицы DataExchange.
 * Наличие записи в этой таблице говорит о необходимости синхронизации данных с 1С для конкретной записи конкретной таблицы.
 * Флаг exchangeStateId говорит о том, была ли проведена синхронизация и о статусе синхронизации.
 *
 * @see ru.niir.goodfil.db.dic.ExchangeState статусы синхронизации
 */
@Entity
@Table(name = "`DataExchange`")
public class DataExchange implements Serializable {
    /**
     * Идентификатор записи
     */
    @Id
    @GeneratedValue
    @Column(name = "`Id`")
    private long id;

    /**
     * Наименование таблицы, запись которой нуждается в синхронизации
     */
    @Column(name = "`Table`", length = 50, nullable = false)
    private String tableName;

    /**
     * Идентификатор записи таблицы tableName, которая нуждается в синхронизации
     */
    @Column(name = "`IdItem`")
    private long itemId;

    /**
     * Статус процесса синхронизации
     *
     * @see ru.niir.goodfil.db.dic.ExchangeState статусы синхронизации
     */
    @Column(name = "`IdExchangeState`")
    private int exchangeStateId = ExchangeState.QUEUED;

    /**
     * Дата создания объекта
     */
    @Column(name = "`CreationDate`", nullable = false)
    private Timestamp creationDate = GoodfilUtils.getCurrentTimestamp();

    /**
     * Идентификатор записи
     */
    public long getId() {
        return id;
    }

    /**
     * Идентификатор записи
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * Наименование таблицы, запись которой нуждается в синхронизации
     */
    public String getTableName() {
        return tableName;
    }

    /**
     * Наименование таблицы, запись которой нуждается в синхронизации
     */
    public void setTableName(String tableName) {
        this.tableName = s(tableName);
    }

    /**
     * Идентификатор записи таблицы tableName, которая нуждается в синхронизации
     */
    public long getItemId() {
        return itemId;
    }

    /**
     * Идентификатор записи таблицы tableName, которая нуждается в синхронизации
     */
    public void setItemId(long itemId) {
        this.itemId = itemId;
    }

    /**
     * Статус процесса синхронизации
     *
     * @see ru.niir.goodfil.db.dic.ExchangeState статусы синхронизации
     */
    public int getExchangeStateId() {
        return exchangeStateId;
    }

    /**
     * Статус процесса синхронизации
     *
     * @see ru.niir.goodfil.db.dic.ExchangeState статусы синхронизации
     */
    public void setExchangeStateId(int exchangeStateId) {
        this.exchangeStateId = exchangeStateId;
    }

    /**
     * Дата создания объекта
     */
    public Timestamp getCreationDate() {
        return creationDate;
    }

    /**
     * Дата создания объекта
     */
    public void setCreationDate(Timestamp creationDate) {
        this.creationDate = creationDate;
    }

    @Override
    public String toString() {
        return "DataExchange{" +
                "id=" + id +
                ", tableName='" + tableName + '\'' +
                ", itemId=" + itemId +
                ", exchangeStateId=" + exchangeStateId +
                ", creationDate=" + creationDate +
                '}';
    }
}
